package br.com.dallasmotopecas.comum.promocao.controller;

import java.sql.Connection;
import java.util.List;

import javax.faces.context.ExternalContext;

import br.com.dallasmotopecas.comum.promocao.model.PromocaoPremiacaoModel;
import br.com.dallasmotopecas.comum.promocao.vo.PromocaoPremiacaoVo;
import br.com.dallasmotopecas.util.controller.AbstractController;
import br.com.dallasmotopecas.util.exception.AlterarObjetoException;
import br.com.dallasmotopecas.util.exception.CampoObrigatorioException;
import br.com.dallasmotopecas.util.exception.ClasseNaoEncontradaException;
import br.com.dallasmotopecas.util.exception.ConexaoException;
import br.com.dallasmotopecas.util.exception.InserirObjetoException;
import br.com.dallasmotopecas.util.exception.ListarObjetoException;
import br.com.dallasmotopecas.util.lang.StringUtil;

public class PromocaoPremiacaoController extends AbstractController
{
	public PromocaoPremiacaoController(ExternalContext externalContext) throws ClasseNaoEncontradaException, ConexaoException
	{
		super(externalContext);
	}

	public PromocaoPremiacaoController(Connection connection) throws ConexaoException
	{
		super(connection);
	}
	
	private void campoObrigatorio(final PromocaoPremiacaoVo promocaoPremiacaoVo) throws CampoObrigatorioException
	{
		if (promocaoPremiacaoVo.getDescricao() == null || StringUtil.getStringEspacoExcedente(promocaoPremiacaoVo.getDescricao()).isEmpty())
			throw new CampoObrigatorioException("Por favor Preencha a Descricao");
	}
	
	public void inserirPremiacao(final PromocaoPremiacaoVo promocaoPremiacaoVo) throws CampoObrigatorioException, InserirObjetoException
	{
		PromocaoPremiacaoModel promocaoPremiacaoModel = null;
		try
		{
			synchronized (PromocaoPremiacaoVo.class)
			{
				campoObrigatorio(promocaoPremiacaoVo);
				promocaoPremiacaoModel = new PromocaoPremiacaoModel(getConnection());
				promocaoPremiacaoModel.inserirPremiacao(promocaoPremiacaoVo);
			}
		}
		catch(InserirObjetoException e)
		{
			rollback();
			throw e;
		}
		finally
		{
			promocaoPremiacaoModel = null;
		}
	}
	
	public void alterarPremiacao(final PromocaoPremiacaoVo promocaoPremiacaoVo) throws CampoObrigatorioException, AlterarObjetoException
	{
		PromocaoPremiacaoModel promocaoPremiacaoModel = null;
		try
		{
			synchronized (PromocaoPremiacaoVo.class)
			{
				campoObrigatorio(promocaoPremiacaoVo);
				promocaoPremiacaoModel = new PromocaoPremiacaoModel(getConnection());
				promocaoPremiacaoModel.alterarPremiacao(promocaoPremiacaoVo);
			}
		}
		catch(AlterarObjetoException e)
		{
			rollback();
			throw e;
		}
		finally
		{
			promocaoPremiacaoModel = null;
		}
	}
	
	public void carregarListaPremiacao(final List<PromocaoPremiacaoVo> listaPremiacao) throws ListarObjetoException
	{
		PromocaoPremiacaoModel promocaoPremiacaoModel = null;
		try
		{
			if (listaPremiacao != null)
			{
				listaPremiacao.clear();
				promocaoPremiacaoModel = new PromocaoPremiacaoModel(getConnection());
				listaPremiacao.addAll(promocaoPremiacaoModel.getListaPremiacao());
			}
		}
		catch(ListarObjetoException e)
		{
			throw e;
		}
		finally
		{
			promocaoPremiacaoModel = null;
		}
	}
}
